//
//  ViewController.m
//  ScreenCutPictureDemo
//
//  Created by 郑惠珠 on 2017/8/3.
//  Copyright © 2017年 Ashimar ZHENG. All rights reserved.
/**
 当你要截取webView  中的长图内容，却获取不到高度时，不妨可以耍点小聪明。
 通过获取  webView  中的  scrollView  的 contentSize.height，
 但是，一开始获取 webView.scrollView.contentSize.height 的高度时，并不能拿到我们想要的长度，而是得到了屏幕的高度，这时可以通过 scrollView  的 代理方法获取 偏移后的height。
 
 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
 NSLog(@"%f",scrollView.contentOffset.y);
 NSLog(@"webview 的高度 %f",webView.scrollView.contentSize.height);
 }
 
 但是要响应 scrollViewDidScroll:  方法。这时我们可以通过手势操作，滚动界面；如果不想滚动界面就能响应方法，那可以通过设置 scrollView  的偏移量，来响应方法。
 
 [webView.scrollView setContentOffset:CGPointMake(0, 5) animated:YES];
 我们让它偏移的位置尽量的小，看不出来是动过，又能获取到最终的高度。
 */

#import "ViewController.h"

@interface ViewController ()<UIWebViewDelegate,UIScrollViewDelegate>
{
    UIWebView *webView;
}
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 64)];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://hd.wuhunews.cn/temp/dist/index.html"]]];
    [self.view addSubview:webView];
    
    webView.delegate = self;
    webView.scrollView.delegate = self;
}

- (IBAction)cancel:(id)sender {
    
    self.imageView.hidden = YES;
    webView.hidden = NO;
}

- (IBAction)screenCutLongImage:(id)sender {
    self.imageView.hidden = YES;

    [webView.scrollView setContentOffset:CGPointMake(0, 5) animated:YES];

    self.imageView.image = [self screenShot];

    self.imageView.hidden = NO;
    webView.hidden = YES;
    
    
    UIImage *image = self.imageView.image;
    UIImageWriteToSavedPhotosAlbum(image/*你要保存到本地相册的图片对象，当然此处更多的需求可能是长按保存，那你就写个长按收拾UILongPressGestureRecognizer手势，给手势加个触发方法不就行了嘛*/, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
    

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    NSLog(@"%f",scrollView.contentOffset.y);
    NSLog(@"webview 的高度 %f",webView.scrollView.contentSize.height);
}

#pragma mark - 截取长图
- (UIImage *)screenShot {
    UIImage* image = nil;
    UIGraphicsBeginImageContextWithOptions(webView.scrollView.contentSize, YES, 0.0);
    
    //保存collectionView当前的偏移量
    CGPoint savedContentOffset = webView.scrollView.contentOffset;
    CGRect saveFrame = webView.scrollView.frame;
    
    //将collectionView的偏移量设置为(0,0)
    webView.scrollView.contentOffset = CGPointZero;
    webView.scrollView.frame = CGRectMake(0, 0, webView.scrollView.contentSize.width, webView.scrollView.contentSize.height);
    
    //在当前上下文中渲染出collectionView
    [webView.scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
    //截取当前上下文生成Image
    image = UIGraphicsGetImageFromCurrentImageContext();
    
    //恢复collectionView的偏移量
    webView.scrollView.contentOffset = savedContentOffset;
    webView.scrollView.frame = saveFrame;
    
    UIGraphicsEndImageContext();
    
    if (image != nil) {
        return image;
    }else {
        return nil;
    }
}

- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    NSString *message = @"保存失败";
    if (!error) {
        message = @"成功保存到相册";
    }else
    {
        message = [error description];
    }
    NSLog(@"message is %@",message);
    
}

@end
